/**
 * Copyright (c) 2020 Coder League
 * All rights reserved.
 *
 * File：MainController.java
 * History:
 *         2020年12月20日: Initially created, Chrise.
 */
package club.coderleague.cfss.controller.main;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import club.coderleague.cfss.annotations.Request;
import club.coderleague.cfss.controller.IndexController;
import club.coderleague.cfss.service.main.MainService;

/**
 * 主界面控制器。
 * @author Chrise
 */
@Controller
@RequestMapping(IndexController.REQUEST_PREFIX + "/main")
public class MainController extends IndexController {
	@Autowired
	private MainService mainService;
	
	/**
	 * 根据父级功能主键和功能类型查询已授权功能。
	 * @author Chrise 2020年12月20日
	 * @param parentfunc 父级功能主键。
	 * @param functype 功能类型。
	 * @return 已授权功能。
	 */
	@ResponseBody
	@PostMapping("/findAuthByParentfuncAndFunctype.xhtml")
	@Request("根据父级功能主键和功能类型查询已授权功能")
	public ModelMap findAuthorizationByParentfuncAndFunctype(Long parentfunc, @RequestParam(value = "functype[]", required = false) List<Integer> functype) {
		return super.createModel(true, this.mainService.findAuthorizationByParentfuncAndFunctype(parentfunc, functype));
	}
	
	/**
	 * 前往修改密码页面。
	 * @author Chrise 2020年12月21日
	 * @return 页面路径。
	 */
	@GetMapping("/goPasswordEditPage.xhtml")
	@Request("前往修改密码页面")
	public String goPasswordEditPage() {
		getRequest().setAttribute("loginOperate", false);
		return "/pc/main/passwordEditPage";
	}
	
	/**
	 * 修改当前登录用户密码。
	 * @author Chrise 2020年12月22日
	 * @param oldpassword 原密码。
	 * @param newpassword 新密码。
	 * @return 修改结果。
	 */
	@ResponseBody
	@PostMapping("/updatePassword.xhtml")
	@Request("修改当前登录用户密码")
	public ModelMap updatePassword(String oldpassword, String newpassword) {
		this.mainService.updatePassword(oldpassword, newpassword, false);
		return super.createModelOnlyStatus(true);
	}
	
	/**
	 * 前往修改用户电话页面。
	 * @author Chrise 2020年12月22日
	 * @return 页面路径。
	 */
	@GetMapping("/goUserphoneEditPage.xhtml")
	@Request("前往修改用户电话页面")
	public String goUserphoneEditPage() {
		return "/pc/main/userphoneEditPage";
	}
	
	/**
	 * 修改当前登录用户电话。
	 * @author Chrise 2020年12月22日
	 * @param userphone 手机号。
	 * @param vercode 验证码。
	 * @return 修改结果。
	 */
	@ResponseBody
	@PostMapping("/updateUserphone.xhtml")
	@Request("修改当前登录用户电话")
	public ModelMap updateUserphone(String userphone, String vercode) {
		String message = this.mainService.updateUserphone(userphone, getSession(), getUserSession());
		/* 暂时不启用验证码
		String message = this.mainService.updateUserphone(userphone, vercode, getSession(), getUserSession());
		*/
		if (message != null) return super.createModel(false, message);
		
		return super.createModelOnlyStatus(true);
	}
	
	/**
	 * 前往修改登录名页面。
	 * @author Chrise 2020年12月22日
	 * @return 页面路径。
	 */
	@GetMapping("/goLoginnameEditPage.xhtml")
	@Request("前往修改登录名页面")
	public String goLoginnameEditPage() {
		return "/pc/main/loginnameEditPage";
	}
	
	/**
	 * 修改当前登录用户登录名
	 * @author Chrise 2020年12月22日
	 * @param newloginname 新登录名。
	 * @return 修改结果。
	 */
	@ResponseBody
	@PostMapping("/updateLoginname.xhtml")
	@Request("修改当前登录用户登录名")
	public ModelMap updateLoginname(String newloginname) {
		this.mainService.updateLoginname(newloginname);
		return super.createModelOnlyStatus(true);
	}
}
